#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstdlib>
#include "MenuBase.h"

using namespace std;

MenuBase::MenuBase(int ni)
{
	NumItens = ni;
	MenuItens = new string[ni];
}

MenuBase::MenuBase(const MenuBase &copia)
{
	MenuItens = new string[copia.NumItens];
	for(int i = 0; i < copia.NumItens; i++)
		MenuItens[i] = copia.MenuItens[i];
	NumItens = copia.NumItens;
	Titulo = copia.Titulo;
}

MenuBase::~MenuBase()
{
	delete [] MenuItens;
}

int MenuBase::GetNumItens()
{
	return NumItens;
}

void MenuBase::SetTitulo(string titulo)
{
	Titulo = titulo;
}

void MenuBase::AdicionaItem(int op, string item)
{
	if(op > NumItens)
	{
		cerr << "Numero de op�ao invalida!";
		return;
	}
	MenuItens[op] = item;	
}

void MenuBase::Show()
{
	int largura = 0;
// Verificando a maior largura do menu
	for(int i = 0; i < NumItens; i++)
	{
		if( MenuItens[i].size() > (unsigned)largura)
			largura = MenuItens[i].size();
	}
	largura = ( (unsigned)largura < Titulo.size() ) ? Titulo.size() : largura;
	 
	largura += 10;
	cout << endl;
	cout << "\t|" << setfill('-') << setw(largura+4) << "|" << endl;
	cout << "\t|" << setfill(' ') << setw(largura+4) << "|" << endl;
	cout << "\t|  " << right << setw(largura-9) << Titulo << setw(11) << "  |" << endl;
	cout << "\t|" << setfill(' ') << setw(largura+4) << "|" << endl;
	cout << left;
	for(int i = 0; i < NumItens; i++)
	{
		cout << "\t|  " << setw(3) << i+1 << ". " << setw(largura-4) << MenuItens[i] <<  "|"  << endl;
	}
	cout << "\t|  " << setfill(' ') << setw(3) << 0 << ". " << setw(largura-4) << "Sair" << "|" << endl;
	cout << right;
	cout << "\t|" << setfill(' ') << setw(largura+4) << "|" << endl;
	cout << "\t|" << setfill('-') << setw(largura+4) << "|" << endl;
}

void MenuBase::GetOpcao()
{
	
	int op = -1;
	while( op != 0 )
	{
		system("cls");
		Show();		
		cout << endl << "Entre Opcao(0-" << NumItens << "): ";
		cin >> op;
		switch (op) {
			case 1:
				cout << "Opcao 1!" << endl;
			break;
			case 2:
				cout << "Opcao 2!" << endl;
			break;
			case 3:
				cout << "Opcao 3!" << endl;
			break;	
			default:
				break;
		}
		cout << endl << "<enter> para continuar....";
		getchar();
		getchar();
	}
	cout << endl << "Fim";
}
